import axios from 'axios';
import {ElMessage} from 'element-plus';
// 创建axios新实例
const axiosInstance = axios.create({
  baseURL: '/cyr', // 接口根地址
  timeout: 30000, // 超时时间
  // headers: { 'content-type': 'application/multipart/form-data' }, // 配置请求头
});
/**
 * 请求拦截器
 */
axiosInstance.interceptors.request.use(
  (config) => {
    // 发起请求之前做一些处理
    const token = localStorage.getItem('TOKEN');
    if (token) {
      config.headers['Authorization'] = token;
    }
    return config;
  },
  (err) => Promise.reject(err),
);

/**
 * 响应拦截器
 */
var errorMessage = [];
var time;
axiosInstance.interceptors.response.use(
  (res) => {
    // 响应数据做一些处理
    // console.log('响应数据 res ', res)
    return res.data;
  },
  (error) => {
    const {response} = error;
    if (response) {
      const status = response.status;
      switch (status) {
        case 404:
          errorMessage.push('资源不存在 404');
          break;
        case 401:
          errorMessage.push('Unauthorized 身份验证凭证缺失!');
          break;
        case 403:
          errorMessage.push('拒绝访问!');
          break;
        case 503:
          errorMessage.push('服务器繁忙!');
          break;
        case 504:
          errorMessage.push('请求超时,请重试!');
          break;
        case 600:
          ElMessage.error('你的账号已在其他设备登录');
          clearTimeout(time);
          errorMessage = [];
          setTimeout(() => {
            console.log(localStorage.getItem('isShop'));
            if (localStorage.getItem('isShop') == 'true') {
              window.location.href = '/login';
            } else {
              window.location.href = '/erpLogin';
            }
          }, 300);
          break;
      }
      errorMessage = Array.from(new Set(errorMessage));
      clearTimeout(time);
      time = setTimeout(() => {
        for (let i = 0; i < errorMessage.length; i++) {
          ElMessage.error(errorMessage[i]);
        }
        errorMessage = [];
      }, 500);
    } else {
      // 说明服务器连结果都没有返回，可能的原因有两种：
      /**
       * 1. 服务器崩掉了
       * 2. 前端客户端断网状态
       */
      if (!window.navigator.onLine) {
        // 判断为断网，可以跳转到断网页面
        ElMessage.error('网络不可用,请检查您的网络连接!');
        return;
      } else {
        ElMessage.error('连接服务端出错!' + error?.message);
        return Promise.reject(error);
      }
    }
  },
);

export default axiosInstance;
